import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.HashMap;




public class Mapa {
private Celda mapa2[][];
private final String nombrearch="MapaInicial.txt";
private Integer maxfila;
private Integer maxcolu;
ArrayList<Posiciones>posiciones;

static int codanumx(String cod){
	int aux=0;
	for(int i=0;i<3;i++){
		aux=aux*10+cod.charAt(i);
	}
	return aux;
}
static int codanumy(String cod){
	int aux=0;
	for(int i=4;i<=6;i++){
		aux=aux*10+cod.charAt(i);
	}
	return aux;
}
static String numacod(Integer x,Integer y){
	
	String or1;
	String or2;
	if(x<10){
		or1=new String("00".concat(x.toString()));
	}else{
		if(x<100){
			or1=new String("0".concat(x.toString()));
		}else{
			or1=new String(x.toString());
		}
	}
	if(y<10){
		or2=new String("_00".concat(y.toString()));
	}else{
		if(y<100){
			or2=new String("_0".concat(y.toString()));
		}else{
			or2=new String("_".concat(y.toString()));
		}
	}
	
	
	return or1.concat(or2);
}

Mapa(){

	this.posiciones=new ArrayList<>();
	try {
		File arch=new File(this.nombrearch);
		FileReader archreader =new FileReader(arch);
		BufferedReader reader= new BufferedReader(archreader);
		String line=null;
		line=reader.readLine();
		String aux=new String();
		int k=0;
		while((line.charAt(k)!=' ')){
			aux=aux.concat(String.valueOf(line.charAt(k)));
			k++;
		}
		this.setMaxcolu(Integer.valueOf(aux));
		k++;
		aux=new String();
		while((line.length()>k)&&(line.charAt(k)!=' ')){
			aux=aux.concat(String.valueOf(line.charAt(k)));
			k++;
		}
		this.setMaxfila(Integer.valueOf(aux));
		
		this.mapa2=new Celda[this.maxcolu][this.maxfila];
		
		int j=0;
		while(((line=reader.readLine())!=null)&&(j<this.getMaxfila())){	
			//System.out.println(line);
			for(int i=0;i<this.getMaxcolu();i++){
				String formato=new String("S00");
				int helper=Integer.valueOf(String.valueOf(line.charAt(i)));
				String codSuelo=formato.concat(String.valueOf(helper));
				String posicion=new String(numacod(j,i));
			//	i,x j,y   CodSuelo:
				this.mapa2[j][i]=new Celda(codSuelo,j,i);
			}
			j++;
		}
		
	}catch (Exception ex){
		ex.printStackTrace();
	}
	
	}


String getposicion(String codigo){
	for(Posiciones a:this.posiciones){
		if(a.getCodigo().equals(codigo))return a.getPosicion();
	}
	return null;
}
void agregarposicion(String codigo,int x,int y){
	Posiciones nuevo=new Posiciones(codigo,Mapa.numacod(x, y), x, y);
	this.posiciones.add(nuevo);
}

void quitarposicion(String codigo){
	for(int i=0;i<this.posiciones.size();i++)if(this.posiciones.get(i).getCodigo().equals(codigo))this.posiciones.remove(i);
}


void vaciar(int x,int y){
	if(!existe(x,y))return;
	Celda aux=this.mapa2[x][y];
	this.mapa2[x][y]=new Celda(aux.getCodSuelo(),null,null,x,y);

}

void llenarbatallon(int x,int y,String codbatallon){
	if(!existe(x,y))return;
	Celda aux=this.mapa2[x][y];
	this.mapa2[x][y]=new Celda(aux.getCodSuelo(),codbatallon,null,x,y);
}

void llenararma(int x,int y,String codarma){
	if(!existe(x,y))return;
	Celda aux=this.mapa2[x][y];
	this.mapa2[x][y]=new Celda(aux.getCodSuelo(),null,codarma,x,y);
}

Boolean existe(int x,int y){
	if((x<0)||(x>this.maxcolu)||(y<0)||(y>this.maxfila))return false;
	return true;
}
Celda get(int x,int y){
	if(!existe(x,y))return null;
	return this.mapa2[x][y];
}




public void showsuelos(){
	BaseDatos bd=new BaseDatos();
	Celda auxiliar;
	Suelos ej;
	for(int i=0;i<this.maxcolu;i++){
		for(int j=0;j<this.maxfila;j++){
			auxiliar=this.mapa2[i][j];
			ej=(Suelos)bd.get(auxiliar.getCodSuelo());
			System.out.print(ej.getForma());
		}
		System.out.println();
	}
}




//geters y seters
public Integer getMaxfila() {
	return maxfila;
}
private void setMaxfila(Integer maxfila) {
	this.maxfila = maxfila;
}
public Integer getMaxcolu() {
	return maxcolu;
}
private void setMaxcolu(Integer maxcolu) {
	this.maxcolu = maxcolu;
}



}
